#include "cmd_msg.h"

// 最大指令数量（静态数组大小）
#define MAX_COMMANDS 100

// 指令表项结构
typedef struct {
    int cmd;        // 指令码
    doCmd handler;  // 对应处理函数
} CmdEntry;

// 静态指令表（编译时分配内存）
static CmdEntry cmdTable[MAX_COMMANDS] = {0};

int insetCmd(int cmd, doCmd handler)
{
    // 查找是否已存在该指令码
    for (int i = 0; i < MAX_COMMANDS; i++) {
        if (cmdTable[i].cmd == cmd) {
            // 已存在，覆盖处理函数
            cmdTable[i].handler = handler;
            return 0;
        }
    }
    
    // 查找空闲位置插入新指令
    for (int i = 0; i < MAX_COMMANDS; i++) {
        if (cmdTable[i].handler == NULL) {
            cmdTable[i].cmd = cmd;
            cmdTable[i].handler = handler;
            return 0;
        }
    }
    
    // fprintf(stderr, "Error: Command table is full (max %d)\n", MAX_COMMANDS);
    return -1;
}

doCmd getCmd(int cmd)
{
    // 线性查找指令码
    for (int i = 0; i < MAX_COMMANDS; i++) {
        if (cmdTable[i].cmd == cmd) {
            return cmdTable[i].handler;
        }
    }
    
    return NULL; 
}

